package GestorPartido;
import ConexionBD.ConexionBD;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

/**
 * @author Abdelilah
 * @version 1.0
 * @created 01-may-2013 21:25:43
 */
public class PartidoBD {

	private static PartidoBD Instancia=null;

	public void PartidoBD(){}

	/**
         * IdJornada INTEGER NOT NULL,
	IdEquipo_L INTEGER NOT NULL,
	IdEquipo_V INTEGER NOT NULL,
	 * 
	 * @param Partido
	 */
	public Partido addPartido(Partido partido){
            
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String fecha = sdf.format(partido.getFecha());
            Integer idGanador = -1;
            String delimitador = "-";
            String[] temp;
/*
            temp = partido.getResultado().split(delimitador);   //Cálculo de idGanador
            
            if(Integer.parseInt(temp[0]) > Integer.parseInt(temp[1])) {
                idGanador = partido.getIdLocal();
            }else if(Integer.parseInt(temp[0]) < Integer.parseInt(temp[1])) {
                idGanador = partido.getIdVisitante();
            }
*/
            if(!partido.getResultado().equals("")){
                    temp = partido.getResultado().split(delimitador);
                    temp[0] = temp[0].trim();
                    temp[1] = temp[1].trim();
                    Integer scorelocal=null,scoreVisit=null ;
                    try{
                         scorelocal =Integer.parseInt(temp[0]); 
                         scoreVisit = Integer.parseInt(temp[1]);
                    }catch(NumberFormatException nfe){}
                    if(scorelocal > scoreVisit) {
                        idGanador = partido.getIdLocal();
                    }else if (scorelocal < scoreVisit){
                        idGanador = partido.getIdVisitante();
                    }   
            }
            String consulta="INSERT INTO Partido(IdJornada,IdEquipo_L,IdEquipo_V,Fecha,Resultado,idGanador) VALUES (" +
                partido.getIdJornada() +", " + 
                partido.getIdLocal() + ", " + 
                partido.getIdVisitante() + ", '" + 
                fecha + "', '" + 
                partido.getResultado() +  "', " + 
                idGanador + ");";
        
            try {
                ConexionBD.getInstancia().conectar();
                ResultSet salidaBD = ConexionBD.getInstancia().actualizar(consulta);
                salidaBD.first();
                // Establece el valor de IdPartido generado por la BD en el objeto partido
                partido.setIdPartido(salidaBD.getInt(1));
                ConexionBD.getInstancia().desconectar();
            } catch (SQLException ex) {
                ex.printStackTrace(System.err);
                return null;
            }

            return partido;
	}

	/**
	 * 
	 * @param Partido
	 */
	public boolean deletePartido(Partido part){
            String consulta;
            
            consulta = "DELETE FROM Partido WHERE IdJornada=" + part.getIdJornada().toString() +
                    " AND IdPartido=" + part.getIdPartido().toString() +
                    ";";
            
            try {
                ConexionBD.getInstancia().conectar();
                ResultSet salidaBD = ConexionBD.getInstancia().actualizar(consulta);
                ConexionBD.getInstancia().desconectar();
            } catch (SQLException ex) {
                return false;
            }
		return true;
	}

	static public PartidoBD getInstancia(){
		if (Instancia == null){
                Instancia = new PartidoBD();
            }
            return Instancia;
        }
	

            
	/**
	 * 
	 * @param IdJornada
	 * @param IdLocal
	 * @param IdVisitante
	 */

	public Partido getPartido(Integer idpartido){
            
            String consulta = "SELECT * FROM Partido WHERE  IdPartido = '" + idpartido + "';";
             Partido part = new Partido();
             try {
                 
            ConexionBD.getInstancia().conectar();        // Establecemos la conexion con la Base de Datos
            ResultSet tabla = ConexionBD.getInstancia().consultar(consulta);  // Ejecutamos la operacion SQL
            if(tabla.last()){
                  int numFilas = tabla.getRow();
                  tabla.beforeFirst();
                  
                  
                  for(int i=0; i<numFilas; i++){
                      tabla.next();
                      
                      part = new Partido(tabla.getInt("IdJornada"), tabla.getInt("IdEquipo_L"), tabla.getInt("IdEquipo_V"),tabla.getString("Resultado"),tabla.getDate("Fecha"));
                      part.setIdPartido(tabla.getInt("IdPartido"));
                  }
                }
              ConexionBD.getInstancia().desconectar();
        } catch(SQLException ex){
        return null;
        }
          
         return part;   
        }
        
        public Partido[] getPartido(Integer IdJornada, Integer IdLocal, Integer IdVisitante, String resultado, String fecha){
            
            String consulta = "SELECT * FROM Partido WHERE IdJornada = '"+ IdJornada+"'";

            if(IdLocal != null){
		consulta += " AND IdEquipo_L = '" + IdLocal+"'";
            }
            if(IdVisitante != null){
                consulta += " AND IdEquipo_V = '" + IdVisitante+"'";
            }
            if(resultado != null){
                consulta += " AND Resultado = '" + resultado+"'";
            }
            if(fecha != null){
                consulta += " AND Fecha = '" + fecha+"'";
            }
            
            consulta += ";";
            
            ArrayList<Partido> Apartidos = new ArrayList<Partido>();
            Partido newParti=null;
            try {
                ConexionBD.getInstancia().conectar();
                ResultSet tabla = ConexionBD.getInstancia().consultar(consulta);
                
                while (tabla.next()) { // Si devuelve false es que la búsqueda es vacía    
                    newParti = new Partido(tabla.getInt("IdJornada"), tabla.getInt("IdEquipo_L"),
                                tabla.getInt("IdEquipo_V"),tabla.getString("Resultado"),tabla.getDate("Fecha"));
                    newParti.setIdPartido(tabla.getInt("IdPartido"));
                    Apartidos.add(newParti);
                }
                ConexionBD.getInstancia().desconectar();
            } catch (SQLException ex) {
                
            }
        Partido[] Vpartidos =Apartidos.toArray( new Partido[Apartidos.size()] );      
        return Vpartidos;
	}
      


	/**
	 * 
	 * @param Partido
	 */
	public boolean updatePartido(Partido partido){
            Boolean salida = true;
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String fecha = sdf.format(partido.getFecha());
            Integer idGanador = -1;
            String delimitador = "-";
            String[] temp;

            if(!partido.getResultado().equals("")){
                    temp = partido.getResultado().split(delimitador);
                    temp[0] = temp[0].trim();
                    temp[1] = temp[1].trim();
                    Integer scorelocal=null,scoreVisit=null ;
                    try{
                         scorelocal =Integer.parseInt(temp[0]); 
                         scoreVisit = Integer.parseInt(temp[1]);
                    }catch(NumberFormatException nfe){}
                    if(scorelocal > scoreVisit) {
                        idGanador = partido.getIdLocal();
                    }else if (scorelocal < scoreVisit){
                        idGanador = partido.getIdVisitante();
                    }   
            }

            String consulta = "UPDATE Partido SET IdJornada = " + partido.getIdJornada() +
                    ", IdEquipo_L = " + partido.getIdLocal() + 
                    ", IdEquipo_V = " + partido.getIdVisitante() +
                    ", Resultado = '" + partido.getResultado() +
                    "', Fecha = '" + fecha +
                    "', idGanador = " + idGanador;
             consulta += " WHERE IdPartido = " + partido.getIdPartido().toString() + ";";
        
            try {
                ConexionBD.getInstancia().conectar();
                ConexionBD.getInstancia().actualizar(consulta);
                ConexionBD.getInstancia().desconectar();
            } catch (SQLException ex) {
                System.out.println(ex);
                salida = false;
            }
            return salida;
	}

}